Jelajahi Sumber

保温箱中空大屏、统计分析管理

unknown 1 bulan lalu
induk
melakukan
7e6e10ec0d

+ 27 - 0
package-lock.json

@@ -21,6 +21,7 @@
         "vue-amap": "^0.5.10",
         "vue-buffer": "^0.0.1",
         "vue-router": "^3.5.1",
+        "vue-seamless-scroll": "^1.1.23",
         "vuex": "^3.6.2"
       },
       "devDependencies": {
@@ -4874,6 +4875,11 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/comutils": {
+      "version": "1.1.19",
+      "resolved": "https://registry.npmmirror.com/comutils/-/comutils-1.1.19.tgz",
+      "integrity": "sha512-JxXB67juILiwhdLwOsYyjUqwWEhHdObI0EClOPk+JDtEuTbac59s0pxGpfCBnNNQ5JommifmcMGneW/4Cg7YWw=="
+    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -12844,6 +12850,14 @@
       "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==",
       "license": "MIT"
     },
+    "node_modules/vue-seamless-scroll": {
+      "version": "1.1.23",
+      "resolved": "https://registry.npmmirror.com/vue-seamless-scroll/-/vue-seamless-scroll-1.1.23.tgz",
+      "integrity": "sha512-HBjUub8WwsKJzbFCrwKPDrZn4e+SSbkKgwWtjKtfLwesiFGwSsVxP44/Z6d3kpXy94qIFOiflJH6l0/9pj7SGA==",
+      "dependencies": {
+        "comutils": "^1.1.9"
+      }
+    },
     "node_modules/vue-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@@ -16869,6 +16883,11 @@
         }
       }
     },
+    "comutils": {
+      "version": "1.1.19",
+      "resolved": "https://registry.npmmirror.com/comutils/-/comutils-1.1.19.tgz",
+      "integrity": "sha512-JxXB67juILiwhdLwOsYyjUqwWEhHdObI0EClOPk+JDtEuTbac59s0pxGpfCBnNNQ5JommifmcMGneW/4Cg7YWw=="
+    },
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -22313,6 +22332,14 @@
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz",
       "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ=="
     },
+    "vue-seamless-scroll": {
+      "version": "1.1.23",
+      "resolved": "https://registry.npmmirror.com/vue-seamless-scroll/-/vue-seamless-scroll-1.1.23.tgz",
+      "integrity": "sha512-HBjUub8WwsKJzbFCrwKPDrZn4e+SSbkKgwWtjKtfLwesiFGwSsVxP44/Z6d3kpXy94qIFOiflJH6l0/9pj7SGA==",
+      "requires": {
+        "comutils": "^1.1.9"
+      }
+    },
     "vue-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",

+ 1 - 0
package.json

@@ -21,6 +21,7 @@
     "vue-amap": "^0.5.10",
     "vue-buffer": "^0.0.1",
     "vue-router": "^3.5.1",
+    "vue-seamless-scroll": "^1.1.23",
     "vuex": "^3.6.2"
   },
   "devDependencies": {

+ 352 - 57
src/components/centerControl.vue

@@ -1,43 +1,177 @@
 <template>
   <!-- 中控大屏 -->
   <div class="center_control">
-    <el-dialog title="提示" :visible.sync="controlVisible" :show-close="false" fullscreen>
+    <el-dialog title="提示" :visible.sync="controlVisible" :show-close="false" fullscreen @closed="dialogClose">
       <template slot="title">
-        <div class="head_control">
-          <div class="fun_btn">
-            <div>实时监控</div>
-            <div>历史轨迹</div>
-          </div>
-          <div class="fun_btn">
-            <i class="el-icon-full-screen icon_fun"></i>
-            <i class="el-icon-switch-button icon_fun" @click="close"></i>
+        <!--Waves Container-->
+        <div class="header">
+          <svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+            viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
+            <defs>
+              <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" />
+            </defs>
+            <g class="parallax">
+              <use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.7" />
+              <use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.5)" />
+              <use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.3)" />
+            </g>
+          </svg>
+          <div class="head_control">
+            <div class="fun_btn1">
+              <div class="title_head_rol center_in" :class="item.flag ? 'active_bgcolor' : ''"
+                v-for="(item,index) in list" :key="index" @click="selectRol(item)">{{item.title}}</div>
+            </div>
+            <div class="fun_btn">
+              <i class="el-icon-full-screen icon_fun" @click="experMode"></i>
+              <i class="el-icon-switch-button icon_fun" @click="close"></i>
+            </div>
           </div>
         </div>
+        <!--Waves end-->
       </template>
       <div class="card_control">
         <div class="map_card">
           <div id="container"></div>
         </div>
-        <div class="card_bottom_control"></div>
+        <div class="card_bottom_control" :class="logisticsFlag ? 'height_300' : 'height_30'">
+          <div style="cursor: pointer;" class="center_in" @click="clickImg">
+            <el-image :class="logisticsFlag ? '' : 'overturn'" style="height: 29px;width: 40px;flex: none;"
+              :src="require('@/assets/images/unfold.png')"></el-image>
+          </div>
+          <div style="width: 100%;height: calc(100% - 30px);" v-if="logisticsFlag">
+            <div class="card_unpack_control">
+              <div style="display: flex;align-items: center;">
+                <div style="width: 260px;margin-right: 10px;">
+                  <el-input v-model="input" placeholder="请输入内容"></el-input>
+                </div>
+                <el-date-picker v-model="value1" type="datetimerange" range-separator="至" start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </div>
+            </div>
+            <div class="card_table_grid">
+              <div class="item_index1 center_in">序号</div>
+              <div class="item_grid center_in" v-for="(item,index) in headerList" :key="index">
+                {{item.title}}
+              </div>
+            </div>
+            <vue-seamless-scroll ref="vueSeamlessScroll" :data="tableData" :class-option="classOption" class="warp"
+              @mousewheel.native="handleScroll">
+              <div class="card_table_grid" v-for="(item, index) in tableData" :key="index">
+                <div class="item_index center_in">{{index + 1}}</div>
+                <div class="item_each center_in">{{item.name}}</div>
+                <div class="item_each center_in">{{item.sn}}</div>
+                <div class="item_each center_in">{{item.status}}</div>
+                <div class="item_each center_in">{{item.deviceData.T_t}}</div>
+                <div class="item_each center_in">{{item.deviceData.T_time}}</div>
+              </div>
+            </vue-seamless-scroll>
+          </div>
+        </div>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
+  import vueSeamlessScroll from "vue-seamless-scroll";
   export default {
     name: 'centerControl',
-    components: {},
+    props: {
+      // 表格label数据
+      tableData: {
+        type: Array,
+        default: () => [],
+      },
+    },
+    components: {
+      vueSeamlessScroll,
+    },
     data() {
       return {
+        fullScreen: false,
+        input: '',
+        value1: '',
+        unpackFlag: true,
+        logisticsFlag: true,
+        list: [{
+          id: 1,
+          flag: true,
+          title: '实时监控',
+        }, {
+          id: 2,
+          flag: false,
+          title: '历史轨迹',
+        }],
         controlVisible: false,
         map: null,
+        headerList: [{
+          title: '名称'
+        }, {
+          title: 'SN'
+        }, {
+          title: '状态'
+        }, {
+          title: '最新温度'
+        }, {
+          title: '最新记录时间'
+        }]
       }
     },
+    computed: {
+      classOption() {
+        return {
+          limitMoveNum: 10,
+          singleHeight: 30,
+        };
+      },
+    },
+    watch: {
+      tableData: {
+        handler() {
+          // 数据更改时也要加
+          // this.$nextTick(() => {
+          //   this.$refs.vueSeamlessScroll.reset()
+          // })
+        },
+        immediate: true,
+      },
+    },
     mounted() {
       // this.keyUpSearch()
     },
     methods: {
+      // 滚动代码
+      handleScroll(e) {
+        if (this.tableData.length > 10) {
+          // 改变组件内部 yPos 的值,这样html的translate(0, yPos)就会随之改变
+          // e.deltaY是滚动的距离
+          this.$refs.vueSeamlessScroll.yPos = this.$refs.vueSeamlessScroll.yPos - e.deltaY
+          // 如果是正数 说明是往上滚
+          if (this.$refs.vueSeamlessScroll.yPos > 0) {
+            this.$refs.vueSeamlessScroll.yPos = 0
+            return
+          }
+          // 如果yPos超过内部实际高度的一半则重新到顶部滚动
+          // 一半的原因是因为组件实际上创建了两个dom,以达到无缝衔接的效果
+          if (Math.abs(this.$refs.vueSeamlessScroll.yPos) > this.$refs.vueSeamlessScroll.realBoxHeight / 2) {
+            this.$refs.vueSeamlessScroll.yPos = 0
+          }
+        }
+      },
+      selectRol(event) {
+        this.list.forEach(item => {
+          if (item.id == event.id) {
+            item.flag = true
+          } else {
+            item.flag = false
+          }
+        })
+      },
+      // 展开收起
+      getUnpack() {
+        this.unpackFlag = false
+      },
       close() {
         this.controlVisible = false
       },
@@ -61,6 +195,55 @@
       destroyMap() {
         this.map && this.map.destroy();
       },
+      clickImg() {
+        if (this.logisticsFlag) {
+          this.logisticsFlag = false
+        } else {
+          this.logisticsFlag = true
+        }
+      },
+      // 全屏
+      experMode() {
+        const full = localStorage.getItem('fullScreen')
+        if (full == 'true' || full == true) {
+          this.fullScreen = false
+          localStorage.setItem("fullScreen", this.fullScreen);
+          this.exitFullscreen()
+        } else {
+          this.fullScreen = true
+          localStorage.setItem("fullScreen", this.fullScreen);
+          let element = document.documentElement;
+          this.launchFullscreen(element);
+        }
+      },
+      // 全屏
+      launchFullscreen(element) {
+        if (element.requestFullscreen) {
+          element.requestFullscreen();
+        } else if (element.webkitRequestFullscreen) {
+          element.webkitRequestFullscreen();
+        } else if (element.mozRequestFullscreen) {
+          element.mozRequestFullscreen();
+        } else if (element.msRequestFullscreen) {
+          element.msRequestFullscreen();
+        }
+      },
+      // 推出全屏
+      exitFullscreen() {
+        if (document.exitFullscreen) {
+          document.exitFullscreen();
+        } else if (document.webkitExitFullscreen) {
+          document.webkitExitFullscreen();
+        } else if (document.mozCancelFullScreen) {
+          document.mozCancelFullScreen();
+        } else if (document.msExitFullscreen) {
+          document.msExitFullscreen();
+        }
+      },
+      // 弹窗关闭
+      dialogClose() {
+        this.logisticsFlag = true
+      }
     }
   }
 </script>
@@ -81,19 +264,59 @@
   }
 
   .head_control {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
     display: flex;
     justify-content: space-between;
-    align-items: center;
-    height: 80px;
+    align-items: flex-end;
+    height: 50px;
     padding: 0px 20px;
+    z-index: 2025;
+    border-bottom: 1px solid #ffffff;
+    // background-image: linear-gradient(to top, #209cff 0%, #68e0cf 100%);
+    background: linear-gradient(60deg, rgba(32, 156, 255, .5) 0%, rgba(0, 172, 193, .5) 100%);
+  }
+
+  .fun_btn1 {
+    display: flex;
+    align-items: flex-end;
   }
 
   .fun_btn {
+    height: 50px;
     display: flex;
     align-items: center;
   }
 
+  .title_head_rol {
+    border-top-right-radius: 5px;
+    border-top-left-radius: 5px;
+    cursor: pointer;
+    font-size: 16px;
+    color: #fff;
+    height: 40px;
+    padding: 0px 15px;
+    -webkit-user-select: none;
+    /* Safari */
+    -moz-user-select: none;
+    /* Firefox */
+    -ms-user-select: none;
+    /* IE/Edge */
+    user-select: none;
+    /* 标准语法 */
+  }
+
+  .active_bgcolor {
+    // background-color: #18a966;
+    // background-image: linear-gradient(to top, #37ecba 0%, #72afd3 100%);
+    background-image: linear-gradient(180deg, #2af598 0%, #009efd 100%);
+  }
+
   .icon_fun {
+    color: #fff;
     cursor: pointer;
     font-size: 30px;
     margin-left: 10px;
@@ -102,70 +325,142 @@
   .card_control {
     position: absolute;
     width: 100%;
-    height: calc(100% - 80px);
+    height: calc(100% - 50px);
     display: flex;
     flex-direction: column;
   }
 
   .map_card {
     width: 100%;
-    height: 100%;
+    // height: 100%;
     flex: 1;
   }
 
   .card_bottom_control {
+    position: relative;
+    border-top: 1px solid #DCDFE6;
+    background-color: #ffffff;
+  }
+
+  .height_300 {
     height: 300px;
-    background-color: #409eff;
   }
 
-  .bubble-container {
-      position: relative;
-      width: 100%;
-      height: 100%;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      color: #fff;
-      text-align: center;
-      z-index: 1; /* Ensure content is above bubbles */
+  .height_30 {
+    height: 30px;
   }
 
-  .bubble-container::before,
-  .bubble-container::after {
-      content: '';
-      position: absolute;
-      top: 0;
-      left: 0;
-      width: 100%;
-      height: 100%;
-      background: transparent;
-      pointer-events: none;
-      z-index: -1; /* Place bubbles behind content */
+  .card_unpack_control {
+    padding: 0px 10px;
+    height: 50px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    border-bottom: 1px solid #DCDFE6;
   }
 
-  .bubble-container::before {
-      animation: bubble-animation 5s infinite linear;
+  .warp {
+    height: calc(100% - 81px);
+    width: 100%;
+    overflow: hidden;
   }
 
-  .bubble-container::after {
-      animation: bubble-animation 7s infinite linear;
+  .overturn {
+    transform: rotate(180deg);
   }
 
-  @keyframes bubble-animation {
-      0% {
-          background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 70%);
-          background-size: 100% 100%;
-          background-position: 0% 100%;
-      }
-      50% {
-          background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 70%);
-          background-size: 200% 200%;
-          background-position: 100% -100%;
-      }
-      100% {
-          background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 70%);
-          background-size: 100% 100%;
-          background-position: 0% 100%;
-      }
+  .card_table_grid {
+    display: flex;
+    align-items: center;
+    justify-content: space-around;
+    border-bottom: 1px solid #DCDFE6;
+    padding: 0px 10px;
+  }
+
+  .item_index1 {
+    width: 40px;
+    height: 30px;
+    font-size: 15px;
+    font-weight: bold;
+  }
+
+  .item_index {
+    width: 40px;
+  }
+
+  .item_grid {
+    flex: 1;
+    height: 30px;
+    font-size: 15px;
+    font-weight: bold;
+  }
+
+  .item_each {
+    flex: 1;
+    height: 40px;
+  }
+
+  .header {
+    position: relative;
+    text-align: center;
+    background: linear-gradient(60deg, rgba(84, 58, 183, 1) 0%, rgba(0, 172, 193, 1) 100%);
+    color: white;
+  }
+
+  .waves {
+    position: relative;
+    width: 100%;
+    height: 50px;
+    margin-bottom: -7px;
+  }
+
+  .parallax>use {
+    animation: move-forever 25s cubic-bezier(.55, .5, .45, .5) infinite;
+  }
+
+  .parallax>use:nth-child(1) {
+    animation-delay: -2s;
+    animation-duration: 7s;
+  }
+
+  .parallax>use:nth-child(2) {
+    animation-delay: -3s;
+    animation-duration: 10s;
+  }
+
+  .parallax>use:nth-child(3) {
+    animation-delay: -4s;
+    animation-duration: 13s;
+  }
+
+  .parallax>use:nth-child(4) {
+    animation-delay: -5s;
+    animation-duration: 20s;
+  }
+
+  @keyframes move-forever {
+    0% {
+      transform: translate3d(-90px, 0, 0);
+    }
+
+    100% {
+      transform: translate3d(85px, 0, 0);
+    }
+  }
+
+  /*Shrinking for mobile*/
+  @media (max-width: 768px) {
+    .waves {
+      height: 40px;
+      min-height: 40px;
+    }
+
+    .content {
+      height: 30vh;
+    }
+
+    h1 {
+      font-size: 24px;
+    }
   }
 </style>

+ 2 - 1
src/router/generator-routers.js

@@ -208,7 +208,8 @@ const rootRouter = {
         title: '订单审核'
       },
       component: () => import('@/views/OrderManagement/OrderReview'),
-    }, {
+    },
+    {
       path: '/statisticalManagement',
       name: 'statisticalManagement',
       meta: {

+ 5 - 1
src/views/common/userInfo.vue

@@ -40,6 +40,7 @@
       }
     },
     mounted() {
+      localStorage.setItem("fullScreen", this.fullScreen);
       const arr = localStorage.getItem('userList')
       this.userList = JSON.parse(arr)
     },
@@ -60,11 +61,14 @@
       },
       // 全屏
       experMode() {
-        if (this.fullScreen) {
+        const full = localStorage.getItem('fullScreen')
+        if (full == 'true' || full == true) {
           this.fullScreen = false
+          localStorage.setItem("fullScreen", this.fullScreen);
           this.exitFullscreen()
         } else {
           this.fullScreen = true
+          localStorage.setItem("fullScreen", this.fullScreen);
           let element = document.documentElement;
           this.launchFullscreen(element);
         }

+ 199 - 2
src/views/page/statisticalManagement.vue

@@ -1,17 +1,214 @@
 <template>
   <!-- 统计分析管理 -->
-  <div>统计分析管理</div>
+  <div>
+    <actionBar :operateList="operateList" :formList="formList" :ruleForm="searchRuleForm" @openModel="openModel"
+      @searchProtocol="searchProtocol"></actionBar>
+    <div class="card_content_interior">
+      <div class="left_interior">
+        <div style="display: flex;margin-bottom: 10px;">
+          <el-checkbox v-model="checked" @change="checkAll">全选</el-checkbox>
+          <div class="title_invert center_in" @click="Inverse">反选</div>
+        </div>
+        <el-checkbox-group v-model="checkedList" @change="checkboxChange">
+          <el-checkbox class="card_checkbox_analyse" :label="item.code" :key="index" :checked="item.checked"
+            v-for="(item,index) in list">
+            <div class="analyse_title">
+              <div class="item_title1">{{item.title}}</div>
+              <div class="item_title2">{{item.code}}</div>
+            </div>
+          </el-checkbox>
+        </el-checkbox-group>
+      </div>
+      <div class="right_interior">
+        <!-- 表单 -->
+        <tables :tableList="tableList" :tableData="tableData" @buttonData="buttonData"></tables>
+        <!-- 分页 -->
+        <div v-if="Total">
+          <pagination :total="Total" :currentPage="Pagination.PageIndex" @changeSize="changeSize"
+            @changeCurrent="changeCurrent">
+          </pagination>
+        </div>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
+  import actionBar from '@/components/actionBar'
+  import tables from '@/components/tables'
+  import pagination from '@/components/pagination'
+  import {
+    employee,
+  } from "./statistics.js";
   export default {
+    name: 'statisticalManagement',
+    components: {
+      actionBar,
+      tables,
+      pagination
+    },
     data() {
       return {
-
+        operateList: [{
+          type: 'add',
+          title: '导出Excel',
+          icon: 'el-icon-plus',
+          colour: 'warning'
+        }, {
+          type: 'import',
+          title: '下载PDF',
+          icon: 'el-icon-upload',
+        }],
+        formList: [{
+          type: 'input',
+          label: '名称',
+          field: 'name',
+          placeholder: '请输入名称',
+        }, {
+          type: 'input',
+          label: 'SN',
+          field: 'sn',
+          placeholder: 'SN',
+        }],
+        searchRuleForm: {
+          name: '',
+          sn: '',
+          status: '',
+        },
+        searchValue: {},
+        checked: '',
+        checkedList: [],
+        list: [{
+          title: '案发时更是',
+          code: '321512353',
+          checked: false,
+        }, {
+          title: '案发时更是',
+          code: '436743654',
+          checked: false,
+        }, {
+          title: '案发时更是',
+          code: '437457457',
+          checked: false,
+        }],
+        Pagination: {
+          PageIndex: 1,
+          PageSize: 10,
+        },
+        Total: 1,
+        tableData: [{
+          id: 1,
+          code: '3155'
+        }],
+        tableList: employee(),
       }
+    },
+    methods: {
+      // 搜索
+      searchProtocol(value) {
+        this.Pagination.PageIndex = 1
+        this.searchValue = value
+        // this.getList()
+      },
+      openModel(type) {},
+      buttonData(row, type) {},
+      checkboxChange(value) {
+        for (let i = 0; i < this.list.length; i++) {
+          let flag = value.includes(this.list[i].code);
+          if (flag) {
+            this.list[i].checked = true
+          } else {
+            this.list[i].checked = false
+          }
+        }
+        this.checkedList = this.checkedList.concat(value);
+      },
+      // 全选
+      checkAll() {
+        this.checkedList = []
+        for (let i = 0; i < this.list.length; i++) {
+          this.$set(this.list[i], 'checked', true)
+        }
+        this.list.forEach(item => {
+          if (item.checked) {
+            this.checkedList.push(item.code)
+          }
+        })
+      },
+      // 反选
+      Inverse() {
+        this.checkedList = []
+        for (let i = 0; i < this.list.length; i++) {
+          let flag = this.list[i].checked;
+          this.$set(this.list[i], 'checked', !flag)
+        }
+        this.list.forEach(item => {
+          if (item.checked) {
+            this.checkedList.push(item.code)
+          }
+        })
+      },
+      changeSize(val) {
+        this.Pagination.PageSize = val
+        // this.getList()
+      },
+      changeCurrent(val) {
+        this.Pagination.PageIndex = val
+        // this.getList()
+      },
     }
   }
 </script>
 
 <style lang="scss">
+  .card_content_interior {
+    display: flex;
+    background-color: #fff;
+    border-radius: 5px;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, .05);
+    margin-top: 15px;
+  }
+
+  .left_interior {
+    width: 20%;
+    padding: 10px;
+  }
+
+  .right_interior {
+    width: 80%;
+  }
+
+  .span-ellipsis {
+    width: 100%;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    margin-right: 20px;
+  }
+
+  .card_checkbox_analyse {
+    width: 100%;
+    padding: 10px 0px;
+  }
+
+  .analyse_title {
+    display: flex;
+    margin-left: 20rpx;
+    flex-direction: column;
+
+    .item_title1 {
+      font-size: 20px;
+    }
+
+    .item_title2 {
+      font-size: 16px;
+      margin-top: 5px;
+    }
+  }
+
+  .title_invert {
+    cursor: pointer;
+    color: red;
+    margin-left: 10px;
+  }
 </style>

+ 36 - 0
src/views/page/statistics.js

@@ -0,0 +1,36 @@
+export const employee = () => {
+  return [{
+    field: 'index',
+    label: '序号',
+    align: 'center',
+  }, {
+    field: 'code',
+    label: '编号',
+    align: 'center',
+  }, {
+    field: 'freezeClaim',
+    label: '冷冻要求',
+    align: 'center',
+  }, {
+    field: 'action',
+    label: '操作',
+    colWidth: '260px',
+    align: 'center',
+    labelButton: [{
+      type: 'logs',
+      label: '详情',
+      icon: 'el-icon-tickets',
+      style: 'success',
+    }, {
+      type: 'edit',
+      label: '编辑',
+      icon: 'el-icon-edit',
+      style: 'primary',
+    }, {
+      type: 'del',
+      label: '删除',
+      icon: 'el-icon-delete',
+      style: 'danger',
+    }]
+  }]
+}

+ 1 - 1
src/views/system/IncubatorManagement.vue

@@ -59,7 +59,7 @@
       </template>
       <thermography ref="thermo" :waybillNo="waybillNo" :timeData="timeQuantum"></thermography>
     </el-dialog>
-    <centerControl ref="control"></centerControl>
+    <centerControl ref="control" :tableData="tableData"></centerControl>
   </div>
 </template>
 

File diff ditekan karena terlalu besar
+ 300 - 300
yarn.lock


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini