| | |
| | | <div class="main_app"> |
| | | <img src="@/assets/images/SecurityControl/bg@2x.png" class="main_bg" alt="" /> |
| | | <div class="main_header"> |
| | | <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" /> |
| | | <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> |
| | | <div class="title">安泰智慧物流园区-安防智能监测</div> |
| | | <div class="time_wrap"> |
| | | <span class="date">{{ date }}</span> |
| | |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>实时园区车辆</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="second_title"> |
| | | <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="" /> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="second_title"> |
| | | <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="" /> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="table"> |
| | | <div class="line header"> |
| | |
| | | <div class="separate"></div> |
| | | <div class="tab" :class="{ active: warningTab == '2' }" @click="tasClick('2')">行为告警</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="one_swiper_wrap"> |
| | | <div class="list one-swiper"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div v-if="warningList.length == 0" class="empty_wrap"> |
| | | <img src="@/assets/images/default_empty.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>园区安防设备</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="monitoring" @click="showJk = !showJk"> |
| | | <img src="@/assets/images/SecurityControl/ic_jiankong@2x.png" class="icon" alt=""> |
| | |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>今日访客滞留情况</div> |
| | | </div> |
| | | <img src="@/assets/images/title@2x.png" class="bg" alt="" /> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | | <div class="table"> |
| | | <div class="line header"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="empty_wrap"> |
| | | <img v-if="dataList3.length == 0" src="@/assets/images/default_empty.png" alt=""> |
| | | <div v-if="dataList3.length == 0" class="empty_wrap"> |
| | | <img src="@/assets/images/default_empty.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | }]), |
| | | new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ |
| | | offset: 0, |
| | | color: '#4370f2' |
| | | }, { |
| | | offset: 1, |
| | | color: '#61d3f9' |
| | | }]), |
| | | new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ |
| | | offset: 0, |
| | | color: '#4679f6' |
| | | }, { |
| | | offset: 1, |
| | | color: '#4674f6' |
| | | }]), |
| | | new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ |
| | | offset: 0, |
| | | color: '#4370f2' |
| | | }, { |
| | | offset: 1, |
| | | color: '#61d3f9' |
| | | }])] |
| | | ] |
| | | const data = [] |
| | | data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: data4.value.waitVisitNum / data4.value.total }) |
| | | data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: data4.value.registerVisitNum / data4.value.total }) |
| | | data.push({ name: '已离开', value: data4.value.levelNum, rate: data4.value.levelNum / data4.value.total }) |
| | | data.push({ name: '滞留', value: data4.value.retentionNum, rate: data4.value.retentionNum / data4.value.total }) |
| | | data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: (data4.value.waitVisitNum / data4.value.total).toFixed(1) }) |
| | | data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: (data4.value.registerVisitNum / data4.value.total).toFixed(1) }) |
| | | data.push({ name: '已离开', value: data4.value.levelNum, rate: (data4.value.levelNum / data4.value.total).toFixed(1) }) |
| | | data.push({ name: '滞留', value: data4.value.retentionNum, rate: (data4.value.retentionNum / data4.value.total).toFixed(1) }) |
| | | const option = { |
| | | color: colors, |
| | | tooltip: { |
| | |
| | | label: { |
| | | show: true, |
| | | position: 'outside', |
| | | formatter: '{a|{b}} {a|{d}%}', |
| | | formatter: (params) => { |
| | | const index = params.dataIndex |
| | | return `{color${index}|${params.data.name} ${params.data.rate}%}` |
| | | // return `<div>${params.data.name}</div>` |
| | | }, |
| | | rich: { |
| | | a: { |
| | | color: '#869CC9', |
| | | fontSize: 13 |
| | | }, |
| | | color0: { color: 'orange', fontSize: 14 }, |
| | | color1: { color: '#869CC9', fontSize: 13 }, |
| | | color2: { color: '#869CC9', fontSize: 13 }, |
| | | color3: { color: '#869CC9', fontSize: 13 } |
| | | } |
| | | }, |
| | | labelLine: { |
| | |
| | | dataListT2.value = temp |
| | | } |
| | | initEchart2() |
| | | loopFn2() |
| | | }) |
| | | } |
| | | |
| | |
| | | return i |
| | | }) |
| | | initEchart3() |
| | | loopFn3() |
| | | }) |
| | | |
| | | // getVisitRetentionData().then(res => { |
| | | // const result = res.data || [] |
| | | // dataList3.value = result.map(i => { |
| | | // if (i.timeOutMinute) { |
| | | // i.timeOutMinute = Math.abs(i.timeOutMinute) |
| | | // } |
| | | // if (i.timeOutMinute > 60 * 24) { |
| | | // i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('D天H时m分') |
| | | // } else if (i.timeOutMinute > 60) { |
| | | // i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('H时m分') |
| | | // } else { |
| | | // i.timeOutMinuteT = item.timeOutMinuteT + '分' |
| | | // } |
| | | |
| | | // return i |
| | | // }) |
| | | // loopFn3() |
| | | // }) |
| | | } |
| | | // const data4 = ref({}) |
| | | // const getData4 = () => { |
| | | // afgetVisitData().then(res => { |
| | | // const result = res.data || {} |
| | | // data4.value = result |
| | | // initEchart3() |
| | | // }) |
| | | // } |
| | | |
| | | const warningTab = ref('0') |
| | | const warningNum = ref(0) |
| | |
| | | warningList.value.forEach((item, i) => { |
| | | // console.log(i); |
| | | if (i == 0 || i % 2 == 0) { |
| | | console.log(i) |
| | | temp.push(item) |
| | | } else { |
| | | temp[temp.length - 1].addr0 = item.addr |
| | |
| | | }) |
| | | warningList.value = temp |
| | | // console.log('temp', warningList.value); |
| | | loopFn1() |
| | | }) |
| | | } |
| | | const tasClick = (val) => { |
| | |
| | | getData1() |
| | | getData2() |
| | | getData3() |
| | | // getData4() |
| | | getData5() |
| | | getWarning() |
| | | |
| | | // initEchart1() |
| | | setInterval(() => { |
| | | getData1() |
| | | getData2() |
| | | getData3() |
| | | getWarning() |
| | | }, 1000 * 60) |
| | | |
| | | setInterval(() => { |
| | | getData5() |
| | | }, 1000 * 60 * 60) |
| | | |
| | | setTimeout(() => { |
| | | loopFn1() |
| | | loopFn2() |
| | | loopFn3() |
| | | }, 12000) |
| | | |
| | | }) |
| | | |
| | | |
| | |
| | | margin-bottom: 20px; |
| | | font-size: 14px; |
| | | color: #D2E0FF; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | |
| | | .second_title { |
| | | margin-top: 24px; |
| | |
| | | .menu_wrap { |
| | | margin-top: 15px; |
| | | max-height: 440px; |
| | | overflow: hidden; |
| | | overflow: auto; |
| | | |
| | | .menu { |
| | | .menu_name { |
| | |
| | | |
| | | .right_box_one { |
| | | margin-bottom: 20px; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | |
| | | .second_title { |
| | | margin-top: 20px; |
| | |
| | | } |
| | | } |
| | | |
| | | .right_box_two {} |
| | | .right_box_two { |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | } |
| | | |
| | | .right_box_three {} |
| | | .right_box_three { |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | margin-right: 20px; |
| | | |
| | | /* one-swiper */ |
| | | .one_swiper_wrap{ |
| | | .one_swiper_wrap { |
| | | height: 140px; |
| | | overflow: hidden; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | } |
| | | |
| | | .list { |
| | | height: 204px; |
| | | overflow: hidden; |
| | |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | position: relative; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | |
| | | .content { |
| | | display: flex; |
| | |
| | | |
| | | .visitor_warning { |
| | | width: 360px; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | |
| | | .table { |
| | | .list { |
| | |
| | | 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; |