<template> 
 | 
  <div class="main_home"> 
 | 
    <div class="home_header"> 
 | 
      <div class="mb10 fs17">下午好,{{ userInfo.realname }}</div> 
 | 
      <div class="fs13"> 
 | 
        今天是 {{ nowDate }} {{ nowWeek }},欢迎访问智慧物流园区安消一体化系统 
 | 
      </div> 
 | 
    </div> 
 | 
    <div class="main"> 
 | 
      <div class="app_content"> 
 | 
        <div class="static_card"> 
 | 
          <div class="card"> 
 | 
            <div class="header"> 
 | 
              <div class="left"> 
 | 
                <div class="fs15">今日在园人数(人)</div> 
 | 
                <div class="num">{{ headerData.todayInParkUserNum }}</div> 
 | 
              </div> 
 | 
              <img src="@/assets/icons/home_icon1.png" alt="" /> 
 | 
            </div> 
 | 
            <div class="content"> 
 | 
              <div>入园人次(人):{{ headerData.todayInUserNum }}</div> 
 | 
              <div>出园人次(人):{{ headerData.todayOutUserNum }}</div> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div class="card"> 
 | 
            <div class="header"> 
 | 
              <div class="left"> 
 | 
                <div class="fs15">在园访客数(人)</div> 
 | 
                <div class="num">{{ headerData.inParkVisitUserNum }}</div> 
 | 
              </div> 
 | 
              <img src="@/assets/icons/home_icon2.png" alt="" /> 
 | 
            </div> 
 | 
            <div class="content"> 
 | 
              <div>访客人次(人):{{ headerData.visitUserNum }}</div> 
 | 
              <div>签离人次(人):{{ headerData.signLevelNum }}</div> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div class="card"> 
 | 
            <div class="header"> 
 | 
              <div class="left"> 
 | 
                <div class="fs15">在园长期相关方数(人)</div> 
 | 
                <div class="num">{{ headerData.inParkLwUserNum }}</div> 
 | 
              </div> 
 | 
              <img src="@/assets/icons/home_icon3.png" alt="" /> 
 | 
            </div> 
 | 
            <div class="content"> 
 | 
              <div>入园人次(人):{{ headerData.lwUserInNum }}</div> 
 | 
              <div>出园人次(人):{{ headerData.lwUserOutNum }}</div> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div class="card"> 
 | 
            <div class="header"> 
 | 
              <div class="left"> 
 | 
                <div class="fs15">今日在园车辆(辆)</div> 
 | 
                <div class="num">{{ headerData.todayInParkCarNum }}</div> 
 | 
              </div> 
 | 
              <img src="@/assets/icons/home_icon4.png" alt="" /> 
 | 
            </div> 
 | 
            <div class="content"> 
 | 
              <div>入园车次(辆):{{ headerData.todayInCarNum }}</div> 
 | 
              <div>出园车次(辆):{{ headerData.todayOutCarNum }}</div> 
 | 
            </div> 
 | 
          </div> 
 | 
        </div> 
 | 
        <div class="funcs"> 
 | 
          <div class="home_title">常用功能</div> 
 | 
          <div class="list"> 
 | 
            <div v-for="item in funcList" @click="funcClick(item)" :key="item.name" class="item"> 
 | 
              <img class="mb10" :src="item.url" alt="" /> 
 | 
              <div>{{ item.name }}</div> 
 | 
            </div> 
 | 
          </div> 
 | 
        </div> 
 | 
        <div class="static_wrap"> 
 | 
          <div class="df mb10"> 
 | 
            <div class="wrap static1"> 
 | 
              <div class="header"> 
 | 
                <div class="home_title">在场人员占比</div> 
 | 
                <!-- <div class="df_ac more"> 
 | 
                  更多<i class="el-icon-arrow-right"></i> 
 | 
                </div> --> 
 | 
              </div> 
 | 
              <div class="content"> 
 | 
                <div class="echart_wrap"> 
 | 
                  <div class="pie_text"> 
 | 
                    <div class="fs13">总数</div> 
 | 
                    <div class="fs15"><strong>{{ headerData.todayInParkUserNum }}</strong></div> 
 | 
                  </div> 
 | 
                  <div class="echart" id="echart1"></div> 
 | 
                </div> 
 | 
                <div class="list"> 
 | 
                  <div class="item" v-for="item, i in manningRatio" :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 class="wrap static2"> 
 | 
              <div class="header"> 
 | 
                <div class="home_title">长期相关方分布</div> 
 | 
                <!-- <div class="df_ac more"> 
 | 
                  更多<i class="el-icon-arrow-right"></i> 
 | 
                </div> --> 
 | 
              </div> 
 | 
              <div class="echart" id="echart2"></div> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div class="df"> 
 | 
            <div class="wrap static3"> 
 | 
              <div class="header"> 
 | 
                <div class="home_title">7日访客统计</div> 
 | 
                <!-- <div class="df_ac more"> 
 | 
                  更多<i class="el-icon-arrow-right"></i> 
 | 
                </div> --> 
 | 
              </div> 
 | 
              <div class="echart" id="echart3"></div> 
 | 
            </div> 
 | 
            <div class="wrap static4"> 
 | 
              <div class="header"> 
 | 
                <div class="home_title">7日车辆统计</div> 
 | 
                <!-- <div class="df_ac more"> 
 | 
                  更多<i class="el-icon-arrow-right"></i> 
 | 
                </div> --> 
 | 
              </div> 
 | 
              <div class="echart" id="echart4"></div> 
 | 
            </div> 
 | 
          </div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <div class="app_side"> 
 | 
        <div class="task"> 
 | 
          <div class="header df_sb"> 
 | 
            <div class="home_title df"> 
 | 
              <span>待办事项</span> 
 | 
              <span class="num" v-if="taskTotal">{{ taskTotal }}</span> 
 | 
            </div> 
 | 
            <div class="df_ac more" @click="jumpPage('/task/index')"> 
 | 
              更多<i class="el-icon-arrow-right"></i> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div class="list"> 
 | 
            <div class="item" v-for="item in taskList" :key="item.id"> 
 | 
              <div class="content"> 
 | 
                <div class="title">{{ item.title }}</div> 
 | 
                <div class="time">{{ item.createDate }}</div> 
 | 
              </div> 
 | 
              <div class="btn" v-permissions="['business:staging:query']" @click="handleDetail(item)">处理</div> 
 | 
            </div> 
 | 
            <div v-if="taskList.length == 0" class="empty"> 
 | 
              <img src="@/assets/images/default_homeimg.png" alt=""> 
 | 
            </div> 
 | 
          </div> 
 | 
        </div> 
 | 
        <div class="warnning"> 
 | 
          <div class="header df_sb"> 
 | 
            <div class="home_title df"> 
 | 
              <span>超时预警</span> 
 | 
              <span class="num" v-if="warningTotal">{{ warningTotal }}</span> 
 | 
            </div> 
 | 
            <div class="df_ac more" @click="jumpPage('/business/strandedPersonnel')"> 
 | 
              更多<i class="el-icon-arrow-right"></i> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div class="list"> 
 | 
            <div class="item" v-for="item in warningList" :key="item.id"> 
 | 
              <div class="name_wrap df_sb"> 
 | 
                <div class="name">{{ item.name }}</div> 
 | 
                <div class="identity">访客</div> 
 | 
              </div> 
 | 
              <div class="line">联系电话:{{ item.phone }}</div> 
 | 
              <div class="line">访客公司:{{ item.companyName }}</div> 
 | 
              <div class="auth df_sb"> 
 | 
                <div class="time">授权期限:{{ item.endtime }}</div> 
 | 
                <div class="btn" @click="departure(item.id)">离场</div> 
 | 
              </div> 
 | 
            </div> 
 | 
          </div> 
 | 
          <div v-if="warningList.length == 0" class="empty"> 
 | 
            <img src="@/assets/images/default_homeimg.png" alt=""> 
 | 
          </div> 
 | 
        </div> 
 | 
      </div> 
 | 
    </div> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import dayjs from 'dayjs' 
 | 
import * as echarts from 'echarts' 
 | 
import { weeks } from '@/utils/config' 
 | 
import { 
 | 
  getWorkbenchData, 
 | 
  getAppHeaderNav 
 | 
} from '@/api' 
 | 
import { level } from '@/api/business/visits' 
 | 
const colors = ['#52a4f7', '#7678f7', '#5fc6d5'] 
 | 
export default { 
 | 
  data() { 
 | 
    return { 
 | 
      colors, 
 | 
      nowDate: '', 
 | 
      nowWeek: '', 
 | 
      headerData: {}, 
 | 
      staticData: {}, 
 | 
      manningRatio: [], 
 | 
      taskList: [], 
 | 
      taskTotal: 0, 
 | 
      warningList: [], 
 | 
      warningTotal: 0, 
 | 
      funcList: [ 
 | 
        { name: '访客报备', path: '', url: require('@/assets/icons/home_func1.png'), path: '/business/reportRecord' }, 
 | 
        { name: '隐患随手拍', path: '', url: require('@/assets/icons/home_func2.png'), path: '/operation/danger/record' }, 
 | 
        { name: '预约会议室', path: '', url: require('@/assets/icons/home_func3.png'), path: '/meeting/bookings' }, 
 | 
        { name: '考勤工作台', path: '', url: require('@/assets/icons/home_func4.png') } 
 | 
      ], 
 | 
      isShowDetail: false, 
 | 
      isShowReport: false, 
 | 
      isShowDanger: false, 
 | 
      isShowDriver: false, 
 | 
    } 
 | 
  }, 
 | 
  computed: { 
 | 
    userInfo() { 
 | 
      return this.$store.state.userInfo 
 | 
    } 
 | 
  }, 
 | 
  created() { 
 | 
    // this.updateDate() 
 | 
    // setInterval(() => { 
 | 
    //   this.updateDate() 
 | 
    // }, 1000 * 60 * 60) 
 | 
  }, 
 | 
  mounted() { 
 | 
    // this.initData() 
 | 
  }, 
 | 
  methods: { 
 | 
    SubSuccess(str) { 
 | 
      this[str] = false 
 | 
      this.getTaskList() 
 | 
    }, 
 | 
    funcClick(item) { 
 | 
      if (item.name == '考勤工作台') { 
 | 
        getAppHeaderNav(4).then(res => { 
 | 
          window.open(res, "_blank") 
 | 
          return 
 | 
        }) 
 | 
      } 
 | 
      this.$router.push(item.path) 
 | 
    }, 
 | 
    updateDate() { 
 | 
      this.nowDate = dayjs().format('YYYY年M月D日') 
 | 
      this.nowWeek = weeks[new Date().getDay()] 
 | 
    }, 
 | 
    initData() { 
 | 
      this.getWorkHead() 
 | 
      this.getWorkBody() 
 | 
      this.getTaskList() 
 | 
      this.getWarningList() 
 | 
    }, 
 | 
    getWarningList() { 
 | 
      getWorkbenchData({ queryType: 4 }).then(res => { 
 | 
        this.warningList = res.timeOutVisitList || [] 
 | 
        this.warningTotal = res.timeOutVisitNum || 0 
 | 
      }) 
 | 
    }, 
 | 
    getTaskList() { 
 | 
      getWorkbenchData({ queryType: 3 }).then(res => { 
 | 
        this.taskList = res.noticesList || [] 
 | 
        this.taskTotal = res.noticesNum || 0 
 | 
      }) 
 | 
    }, 
 | 
    getWorkBody() { 
 | 
      getWorkbenchData({ queryType: 2 }).then(res => { 
 | 
        this.staticData = res || {} 
 | 
        this.initEchart2() 
 | 
        this.initEchart3() 
 | 
        this.initEchart4() 
 | 
      }) 
 | 
    }, 
 | 
    getWorkHead() { 
 | 
      getWorkbenchData({ queryType: 1 }).then(res => { 
 | 
        this.headerData = res || {} 
 | 
        let arr = [] 
 | 
        arr.push({ name: '访客', value: this.headerData.inParkVisitUserNum }) 
 | 
        arr.push({ name: '内部员工', value: this.headerData.todayInParkUserNum - this.headerData.inParkLwUserNum - this.headerData.inParkVisitUserNum }) 
 | 
        arr.push({ name: '长期相关方', value: this.headerData.inParkLwUserNum }) 
 | 
        arr.sort((a, b) => b.value - a.value) 
 | 
        this.manningRatio = arr 
 | 
        this.initEchart1() 
 | 
      }) 
 | 
    }, 
 | 
    jumpPage(page) { 
 | 
      this.$router.push(page) 
 | 
    }, 
 | 
    departure(id) { 
 | 
      this.$confirm('确定离厂吗, 是否继续?', '提示', { 
 | 
        confirmButtonText: '确定', 
 | 
        cancelButtonText: '取消', 
 | 
        type: 'warning' 
 | 
      }).then(() => { 
 | 
        level(id) 
 | 
          .then(res => { 
 | 
            this.getWarningList() 
 | 
          }) 
 | 
      }).catch(() => { 
 | 
  
 | 
      }) 
 | 
    }, 
 | 
    handleDetail(row) { 
 | 
      if (row.objType === 2) { 
 | 
        this.$refs.OperaDetailsWindow.open('公务车申请详情', { ...row, id: row.objId }) 
 | 
        return 
 | 
      } 
 | 
      if (row.objType === 1) { 
 | 
        this.isShowReport = true 
 | 
        this.$nextTick(() => { 
 | 
          this.$refs.VisReportDetailRef.id = row.objId 
 | 
          this.$refs.VisReportDetailRef.type = row.objType 
 | 
          this.$refs.VisReportDetailRef.getDetail() 
 | 
          this.$refs.VisReportDetailRef.isShowModal = true 
 | 
        }) 
 | 
        return 
 | 
      } 
 | 
      if (row.objType === 3) { 
 | 
        const obj = { ...row, id: row.objId } 
 | 
        this.$refs.OperaHiddenDangerWindow.open('隐患随手拍详情', obj) 
 | 
        return 
 | 
      } 
 | 
      if (row.objType === 6) { 
 | 
        const obj = { ...row, id: row.objId } 
 | 
        this.isShowDriver = true 
 | 
        this.$nextTick(() => { 
 | 
          this.$refs.DriverDetailRef.id = row.objId 
 | 
          this.$refs.DriverDetailRef.type = row.objType 
 | 
          this.$refs.DriverDetailRef.getDetail() 
 | 
          this.$refs.DriverDetailRef.isShowModal = true 
 | 
        }) 
 | 
        return 
 | 
      } 
 | 
      if (row.objType === 0) { 
 | 
        this.isShowDetail = true 
 | 
        this.$nextTick(() => { 
 | 
          this.$refs.DetailRef.id = row.objId 
 | 
          this.$refs.DetailRef.type = row.objType 
 | 
          this.$refs.DetailRef.getDetail() 
 | 
          this.$refs.DetailRef.isShowModal = true 
 | 
        }) 
 | 
      } 
 | 
    }, 
 | 
    initEchart1() { 
 | 
      const myChart = echarts.init(document.getElementById('echart1')) 
 | 
      let that = this 
 | 
  
 | 
      const option = { 
 | 
        tooltip: { 
 | 
          trigger: 'item' 
 | 
        }, 
 | 
        series: [ 
 | 
          { 
 | 
            type: 'pie', 
 | 
            radius: ['42%', '90%'], 
 | 
            label: { 
 | 
              show: false, 
 | 
              position: 'center' 
 | 
            }, 
 | 
            color: colors, 
 | 
            labelLine: { 
 | 
              show: false 
 | 
            }, 
 | 
            data: that.manningRatio 
 | 
            // data: [ 
 | 
            //   { value: that.headerData.inParkVisitUserNum, name: '访客' }, 
 | 
            //   { value: that.headerData.todayInParkUserNum - that.headerData.inParkVisitUserNum - that.headerData.inParkLwUserNum, name: '内部员工' }, 
 | 
            //   { value: that.headerData.inParkLwUserNum, name: '长期相关方' } 
 | 
            // ] 
 | 
          } 
 | 
        ] 
 | 
      } 
 | 
      myChart.setOption(option) 
 | 
      window.addEventListener('resize', function () { // 执行 
 | 
        myChart.resize() 
 | 
      }) 
 | 
    }, 
 | 
    initEchart2() { 
 | 
      const myChart = echarts.init(document.getElementById('echart2')) 
 | 
      let that = this 
 | 
      myChart.setOption({ 
 | 
        grid: { 
 | 
          top: '4%', 
 | 
          left: '2%', 
 | 
          right: '6%', 
 | 
          bottom: '2%', 
 | 
          containLabel: true 
 | 
        }, 
 | 
        tooltip: { 
 | 
          trigger: 'axis', 
 | 
          axisPointer: { 
 | 
            type: 'line' 
 | 
          } 
 | 
        }, 
 | 
        xAxis: { 
 | 
          type: 'value', 
 | 
          position: 'bottom', 
 | 
          splitLine: { 
 | 
            show: true, 
 | 
            lineStyle: { 
 | 
              // 这里输入线条的样式 
 | 
              color: 'rgba(255,255,255,0.14)' 
 | 
            } 
 | 
          } 
 | 
        }, 
 | 
        yAxis: { 
 | 
          type: 'category', 
 | 
          data: that.staticData.lwList.map(i => i.name) 
 | 
        }, 
 | 
        series: [ 
 | 
          { 
 | 
            data: that.staticData.lwList.map(i => i.num), 
 | 
            type: 'bar', 
 | 
            barWidth: 10, 
 | 
            itemStyle: { 
 | 
              normal: { 
 | 
                color: new echarts.graphic.LinearGradient( 
 | 
                  1, 0, 0, 0, 
 | 
                  [ 
 | 
                    { offset: 0, color: '#56abf8' }, 
 | 
                    { offset: 1, color: '#407ff0' } 
 | 
                  ] 
 | 
                ), 
 | 
                // barBorderRadius: [0, 10, 10, 0] 
 | 
              } 
 | 
            } 
 | 
          } 
 | 
        ] 
 | 
      }) 
 | 
      window.addEventListener('resize', function () { // 执行 
 | 
        myChart.resize() 
 | 
      }) 
 | 
    }, 
 | 
    initEchart3() { 
 | 
      const myChart = echarts.init(document.getElementById('echart3')) 
 | 
      let that = this 
 | 
      myChart.setOption({ 
 | 
        tooltip: { 
 | 
          trigger: 'axis', 
 | 
          axisPointer: { 
 | 
            type: 'line' 
 | 
          }, 
 | 
          formatter: function (params) { 
 | 
            return ` 
 | 
          <div style="background-color: #15323f;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: #6feef0;"></div> 
 | 
              <span style="margin-left: 6px;">${params[0].value}</span> 
 | 
              <div>人</div> 
 | 
            </div> 
 | 
          </div> 
 | 
        ` 
 | 
          } 
 | 
        }, 
 | 
        xAxis: { 
 | 
          type: 'category', 
 | 
          boundaryGap: false, 
 | 
          data: that.staticData.weekVisitList.map(i => i.name) 
 | 
        }, 
 | 
        yAxis: { 
 | 
          type: 'value', 
 | 
          name: '人数', 
 | 
          nameTextStyle: { 
 | 
            padding: [0, 0, 4, -30] // 四个数字分别为上右下左与原位置距离 
 | 
          }, 
 | 
          splitLine: { 
 | 
            show: true, 
 | 
            lineStyle: { 
 | 
              // 这里输入线条的样式 
 | 
              color: 'rgba(255,255,255,0.14)' 
 | 
            } 
 | 
          } 
 | 
        }, 
 | 
        grid: { 
 | 
          top: '16%', 
 | 
          left: '2%', 
 | 
          right: '8%', 
 | 
          bottom: '2%', 
 | 
          containLabel: true 
 | 
        }, 
 | 
        series: [ 
 | 
          { 
 | 
            data: that.staticData.weekVisitList.map(i => i.num), 
 | 
            type: 'line', 
 | 
            areaStyle: { 
 | 
              normal: { 
 | 
                color: { 
 | 
                  x: 0, 
 | 
                  y: 0, 
 | 
                  x2: 0, 
 | 
                  y2: 1, 
 | 
                  colorStops: [{ 
 | 
                    offset: 0, 
 | 
                    color: '#207FF7' // 0% 处的颜色 
 | 
                  }, { 
 | 
                    offset: 1, 
 | 
                    color: 'rgba(255,255,255,.2)' // 100% 处的颜色 
 | 
                  }], 
 | 
                  globalCoord: false // 缺省为 false 
 | 
                } 
 | 
              } 
 | 
            }, 
 | 
            lineStyle: { // 线条样式 
 | 
              color: { 
 | 
                type: 'linear', 
 | 
                x: 0, 
 | 
                y: 0, 
 | 
                x2: 0, 
 | 
                y2: 1, 
 | 
                colorStops: [{ 
 | 
                  offset: 0, color: '#207FF7' // 0% 处的颜色 
 | 
                }, { 
 | 
                  offset: 1, color: '#207FF7' // 100% 处的颜色 
 | 
                }] 
 | 
              }, 
 | 
              width: 2 // 线条粗细 
 | 
            }, 
 | 
            symbol: 'circle', 
 | 
            symbolSize: 10, 
 | 
            itemStyle: { 
 | 
              borderWidth: 1, 
 | 
              borderColor: '#fff', 
 | 
              color: '#207FF7' 
 | 
            }, 
 | 
            smooth: false 
 | 
          } 
 | 
        ] 
 | 
      }) 
 | 
      window.addEventListener('resize', function () { // 执行 
 | 
        myChart.resize() 
 | 
      }) 
 | 
    }, 
 | 
    initEchart4() { 
 | 
      const myChart = echarts.init(document.getElementById('echart4')) 
 | 
      let that = this 
 | 
      myChart.setOption({ 
 | 
        tooltip: { 
 | 
          trigger: 'axis', 
 | 
          axisPointer: { 
 | 
            type: 'line' 
 | 
          }, 
 | 
          formatter: function (params) { 
 | 
            return ` 
 | 
          <div style="background-color: #15323f;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: #6feef0;"></div> 
 | 
              <span style="margin-left: 6px;">${params[0].value}</span> 
 | 
              <div>辆</div> 
 | 
            </div> 
 | 
          </div> 
 | 
        ` 
 | 
          } 
 | 
        }, 
 | 
        xAxis: { 
 | 
          type: 'category', 
 | 
          boundaryGap: false, 
 | 
          data: that.staticData.weekCarList.map(i => i.name) 
 | 
        }, 
 | 
        yAxis: { 
 | 
          type: 'value', 
 | 
          name: '车辆数', 
 | 
          nameTextStyle: { 
 | 
            padding: [0, 0, 4, -30] // 四个数字分别为上右下左与原位置距离 
 | 
          }, 
 | 
          splitLine: { 
 | 
            show: true, 
 | 
            lineStyle: { 
 | 
              // 这里输入线条的样式 
 | 
              color: 'rgba(255,255,255,0.14)' 
 | 
            } 
 | 
          } 
 | 
        }, 
 | 
        grid: { 
 | 
          top: '16%', 
 | 
          left: '2%', 
 | 
          right: '8%', 
 | 
          bottom: '4%', 
 | 
          containLabel: true 
 | 
        }, 
 | 
        series: [ 
 | 
          { 
 | 
            data: that.staticData.weekCarList.map(i => i.num), 
 | 
            type: 'line', 
 | 
            areaStyle: { 
 | 
              normal: { 
 | 
                color: { 
 | 
                  x: 0, 
 | 
                  y: 0, 
 | 
                  x2: 0, 
 | 
                  y2: 1, 
 | 
                  colorStops: [{ 
 | 
                    offset: 0, 
 | 
                    color: '#42D49D' // 0% 处的颜色 
 | 
                  }, { 
 | 
                    offset: 1, 
 | 
                    color: 'rgba(255,255,255,.5)' // 100% 处的颜色 
 | 
                  }], 
 | 
                  globalCoord: false // 缺省为 false 
 | 
                } 
 | 
              } 
 | 
            }, 
 | 
            lineStyle: { // 线条样式 
 | 
              color: { 
 | 
                type: 'linear', 
 | 
                x: 0, 
 | 
                y: 0, 
 | 
                x2: 0, 
 | 
                y2: 1, 
 | 
                colorStops: [{ 
 | 
                  offset: 0, color: '#42D49D' // 0% 处的颜色 
 | 
                }, { 
 | 
                  offset: 1, color: '#42D49D' // 100% 处的颜色 
 | 
                }] 
 | 
              }, 
 | 
              width: 2 // 线条粗细 
 | 
            }, 
 | 
            symbol: 'circle', 
 | 
            symbolSize: 10, 
 | 
            itemStyle: { 
 | 
              borderWidth: 1, 
 | 
              borderColor: '#fff', 
 | 
              color: '#42D49D' // 折线点的颜色 
 | 
            }, 
 | 
            smooth: false 
 | 
          } 
 | 
        ] 
 | 
      }) 
 | 
      window.addEventListener('resize', function () { // 执行 
 | 
        myChart.resize() 
 | 
      }) 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
div { 
 | 
  box-sizing: border-box; 
 | 
} 
 | 
  
 | 
.home_title { 
 | 
  font-weight: 600; 
 | 
  font-size: 16px; 
 | 
  color: #222222; 
 | 
  line-height: 22px; 
 | 
} 
 | 
  
 | 
.main { 
 | 
  display: flex; 
 | 
  position: relative; 
 | 
  z-index: 99; 
 | 
  
 | 
  .app_content { 
 | 
    flex: 1; 
 | 
  
 | 
    .static_card { 
 | 
      height: 187px; 
 | 
      color: #fff; 
 | 
      display: flex; 
 | 
      justify-content: space-between; 
 | 
  
 | 
      .card { 
 | 
        flex: 1; 
 | 
        height: 187px; 
 | 
        background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%); 
 | 
        box-shadow: 0px 2px 10px 0px rgba(32, 127, 247, 0.4); 
 | 
        border-radius: 8px; 
 | 
        margin-right: 14px; 
 | 
  
 | 
        &:nth-of-type(2) { 
 | 
          background: linear-gradient(270deg, #8383ff 0%, #6b6eff 100%); 
 | 
        } 
 | 
  
 | 
        &:nth-of-type(3) { 
 | 
          background: linear-gradient(270deg, #42d49d 0%, #12bb8b 100%); 
 | 
        } 
 | 
  
 | 
        &:nth-of-type(4) { 
 | 
          margin-right: 0; 
 | 
          background: linear-gradient(270deg, #30d3de 0%, #04b7cd 100%); 
 | 
        } 
 | 
  
 | 
        .header { 
 | 
          height: 103px; 
 | 
          display: flex; 
 | 
          justify-content: space-between; 
 | 
          align-items: center; 
 | 
          padding: 20px 20px 12px; 
 | 
          border-bottom: 1px solid rgba(255, 255, 255, 0.2); 
 | 
  
 | 
          img { 
 | 
            width: 40px; 
 | 
            height: 40px; 
 | 
          } 
 | 
  
 | 
          .num { 
 | 
            font-weight: 600; 
 | 
            font-size: 30px; 
 | 
            margin-top: 12px; 
 | 
          } 
 | 
        } 
 | 
  
 | 
        .content { 
 | 
          height: 82px; 
 | 
          display: flex; 
 | 
          flex-direction: column; 
 | 
          justify-content: space-between; 
 | 
          font-size: 13px; 
 | 
          padding: 15px 20px 20px; 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  
 | 
    .funcs { 
 | 
      height: 149px; 
 | 
      padding: 20px; 
 | 
      background: #fff; 
 | 
      margin: 10px 0; 
 | 
  
 | 
      .list { 
 | 
        display: flex; 
 | 
        padding-top: 20px; 
 | 
  
 | 
        .item { 
 | 
          display: flex; 
 | 
          flex-direction: column; 
 | 
          align-items: center; 
 | 
          justify-content: center; 
 | 
          margin-right: 24px; 
 | 
          cursor: pointer; 
 | 
  
 | 
          img { 
 | 
            width: 44px; 
 | 
            height: 44px; 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  
 | 
  .app_side { 
 | 
    width: 408px; 
 | 
    margin-left: 10px; 
 | 
  
 | 
    .task { 
 | 
      background: #fff; 
 | 
      border-radius: 2px; 
 | 
      border: 1px solid #eeeeee; 
 | 
      padding: 20px; 
 | 
      height: 346px; 
 | 
      margin-bottom: 10px; 
 | 
  
 | 
      .header { 
 | 
        .num { 
 | 
          position: relative; 
 | 
          top: 3px; 
 | 
          height: 16px; 
 | 
          line-height: 16px; 
 | 
          font-size: 12px; 
 | 
          color: #ffffff; 
 | 
          padding: 0 6px; 
 | 
          font-weight: 400; 
 | 
          background: red; 
 | 
          border-radius: 8px; 
 | 
          margin-left: 13px; 
 | 
        } 
 | 
  
 | 
        .more { 
 | 
          font-size: 13px; 
 | 
          color: #999999; 
 | 
        } 
 | 
      } 
 | 
  
 | 
      .list { 
 | 
        .item { 
 | 
          display: flex; 
 | 
          align-items: center; 
 | 
          margin-top: 15px; 
 | 
  
 | 
          .content { 
 | 
            flex: 1; 
 | 
  
 | 
            .title { 
 | 
              color: #222222; 
 | 
              margin-bottom: 5px; 
 | 
            } 
 | 
  
 | 
            .time { 
 | 
              color: #999999; 
 | 
              font-size: 12px; 
 | 
            } 
 | 
          } 
 | 
  
 | 
          .btn { 
 | 
            margin-left: 10px; 
 | 
            width: 58px; 
 | 
            text-align: center; 
 | 
            height: 30px; 
 | 
            line-height: 30px; 
 | 
            background: #ffffff; 
 | 
            border-radius: 2px; 
 | 
            border: 1px solid #207ff7; 
 | 
            font-size: 13px; 
 | 
            color: #207ff7; 
 | 
            cursor: pointer; 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  
 | 
    .warnning { 
 | 
      background: #fff; 
 | 
      border-radius: 2px; 
 | 
      border: 1px solid #eeeeee; 
 | 
      padding: 20px; 
 | 
      height: 508px; 
 | 
  
 | 
      .header { 
 | 
        .num { 
 | 
          position: relative; 
 | 
          top: 3px; 
 | 
          height: 16px; 
 | 
          line-height: 16px; 
 | 
          font-size: 12px; 
 | 
          color: #ffffff; 
 | 
          padding: 0 6px; 
 | 
          font-weight: 400; 
 | 
          background: red; 
 | 
          border-radius: 8px; 
 | 
          margin-left: 13px; 
 | 
        } 
 | 
  
 | 
        .more { 
 | 
          font-size: 13px; 
 | 
          color: #999999; 
 | 
        } 
 | 
      } 
 | 
  
 | 
      .list { 
 | 
        padding-top: 6px; 
 | 
  
 | 
        .item { 
 | 
          margin-top: 10px; 
 | 
          padding: 15px; 
 | 
          width: 100%; 
 | 
          height: 140px; 
 | 
          background: rgba(32, 127, 247, 0.05); 
 | 
          border-radius: 4px; 
 | 
  
 | 
          .name_wrap { 
 | 
            margin-bottom: 10px; 
 | 
  
 | 
            .name { 
 | 
              font-weight: 600; 
 | 
              color: #222222; 
 | 
            } 
 | 
  
 | 
            .identity { 
 | 
              font-size: 13px; 
 | 
              color: #207ff7; 
 | 
            } 
 | 
          } 
 | 
  
 | 
          .line { 
 | 
            color: #666666; 
 | 
            margin-bottom: 8px; 
 | 
            font-size: 13px; 
 | 
          } 
 | 
  
 | 
          .auth { 
 | 
            .time { 
 | 
              font-weight: 600; 
 | 
              font-size: 13px; 
 | 
              color: #ee3821; 
 | 
            } 
 | 
  
 | 
            .btn { 
 | 
              margin-left: 10px; 
 | 
              width: 58px; 
 | 
              text-align: center; 
 | 
              height: 30px; 
 | 
              cursor: pointer; 
 | 
              line-height: 30px; 
 | 
              background: #ffffff; 
 | 
              border-radius: 2px; 
 | 
              border: 1px solid #207ff7; 
 | 
              font-size: 13px; 
 | 
              color: #207ff7; 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  
 | 
    .more { 
 | 
      cursor: pointer; 
 | 
    } 
 | 
  
 | 
    .empty { 
 | 
      height: 300px; 
 | 
      display: flex; 
 | 
      justify-content: center; 
 | 
      align-items: center; 
 | 
  
 | 
      img { 
 | 
        width: 140px; 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  
 | 
  .static_wrap { 
 | 
    .wrap { 
 | 
      background: #fff; 
 | 
      padding: 20px 20px 10px; 
 | 
      border-radius: 2px; 
 | 
      border: 1px solid #eeeeee; 
 | 
      height: 250px; 
 | 
      flex: 1; 
 | 
  
 | 
      &:nth-of-type(2n) { 
 | 
        margin-left: 10px; 
 | 
      } 
 | 
  
 | 
      .echart { 
 | 
        width: 100%; 
 | 
        height: 190px; 
 | 
      } 
 | 
  
 | 
      .header { 
 | 
        display: flex; 
 | 
        justify-content: space-between; 
 | 
        align-items: center; 
 | 
  
 | 
        .more { 
 | 
          font-size: 13px; 
 | 
          color: #999999; 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  
 | 
    .static1 { 
 | 
      .content { 
 | 
        display: flex; 
 | 
        justify-content: center; 
 | 
        align-items: center; 
 | 
        height: 100%; 
 | 
  
 | 
        .echart_wrap { 
 | 
          position: relative; 
 | 
  
 | 
          .pie_text { 
 | 
            position: absolute; 
 | 
            left: 50%; 
 | 
            top: 50%; 
 | 
            transform: translate(-50%, -50%); 
 | 
            z-index: 999; 
 | 
          } 
 | 
        } 
 | 
  
 | 
        .echart { 
 | 
          width: 150px; 
 | 
          height: 150px; 
 | 
        } 
 | 
  
 | 
        .list { 
 | 
          margin-left: 36px; 
 | 
  
 | 
          .item { 
 | 
            display: flex; 
 | 
            align-items: center; 
 | 
            margin: 8px 0; 
 | 
  
 | 
            .icon { 
 | 
              width: 16px; 
 | 
              height: 16px; 
 | 
              border-radius: 50%; 
 | 
              margin-right: 6px; 
 | 
              background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%); 
 | 
            } 
 | 
  
 | 
            .text { 
 | 
              margin-right: 6px; 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
.main_home { 
 | 
  background: #f4f7fc; 
 | 
  position: relative; 
 | 
  width: 100%; 
 | 
  height: 100%; 
 | 
  overflow: auto; 
 | 
  padding: 20px; 
 | 
  padding-top: 92px; 
 | 
  
 | 
  .home_header { 
 | 
    position: absolute; 
 | 
    top: 0; 
 | 
    left: 0; 
 | 
    width: 100%; 
 | 
    height: 200px; 
 | 
    padding: 20px; 
 | 
    color: #fff; 
 | 
    background: linear-gradient(180deg, #207ff7 0%, rgba(32, 127, 247, 0) 100%); 
 | 
  } 
 | 
} 
 | 
</style> 
 |