| | |
| | | <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"> |
| | |
| | | <div class="rate"> |
| | | <div class="la"> |
| | | <span>车位使用率</span> |
| | | <span v-if="data.inParkCarTotal && data.parkingLotTotal" class="num">{{ data.parkingUseRate }}%</span> |
| | | <span class="num">{{ data.parkingUseRate }}%</span> |
| | | </div> |
| | | <div class="val"> |
| | | <Percent :rate="data.parkingUseRate" /> |
| | |
| | | <div class="car_static"> |
| | | <div class="echart_wrap"> |
| | | <div class="pie_text"> |
| | | <div class="fs30"><strong v-if="data.visitJobCarTotal || data.visitJobCarTotal == 0">{{ data.internalJobCarTotal + |
| | | <div class="fs30"><strong v-if="data.visitJobCarTotal || data.visitJobCarTotal == 0">{{ |
| | | data.internalJobCarTotal + |
| | | data.relatedJobCarTotal + data.visitJobCarTotal }}</strong></div> |
| | | <div>货车</div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="center_box"> |
| | | <div v-if="showJk" class="jiankong"> |
| | | <div v-show="showJk" class="jiankong"> |
| | | <img class="jk_bg" src="@/assets/images/SecurityControl/jiankong_bg@2x.png" alt=""> |
| | | <div class="content"> |
| | | <video :src="activeVideo" class="video"></video> |
| | | <div class="player_bg" style="width: 100%;height: 100%;" id="playWnd"> </div> |
| | | </div> |
| | | <div class="right_wrap"> |
| | | <div class="menus"> |
| | | <div class="search_wrap"> |
| | | <img class="search" src="@/assets/images/SecurityControl/ic_search@2x.png" alt=""> |
| | | <input v-model="dataValue5" @blur="getData5" @keyup.enter="getData5" class="input" type="text" placeholder="搜索监控名称"> |
| | | <input v-model="dataValue5" @blur="getData5" @keyup.enter="getData5" class="input" type="text" |
| | | placeholder="搜索监控名称"> |
| | | </div> |
| | | <div class="menu_wrap"> |
| | | <div class="menu" v-for="menu, i in data5"> |
| | |
| | | </div> |
| | | |
| | | </div> |
| | | <div v-else class="center_box_one"> |
| | | <div v-show="!showJk" class="center_box_one"> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="name_wrap"> |
| | |
| | | <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="list one-swiper"> |
| | | <div class="swiper-wrapper"> |
| | | <div class="one-swiper-slide swiper-slide item" v-for="item in warningList"> |
| | | <div class="item_wrap"> |
| | | <img :src="item.img" class="avatar" alt=""> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="name">{{ item.title }}</div> |
| | | <div class="have_time">已经发生{{ item.haveTime }}</div> |
| | | </div> |
| | | <div class="wrap"> |
| | | <div class="line addr"> |
| | | <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> |
| | | <span>{{ item.addr }}</span> |
| | | <div class="one_swiper_wrap"> |
| | | <div class="list one-swiper"> |
| | | <div class="swiper-wrapper"> |
| | | <div class="one-swiper-slide swiper-slide item" v-for="item in warningList"> |
| | | <div class="item_wrap"> |
| | | <img :src="item.img" class="avatar" alt=""> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="name">{{ item.title }}</div> |
| | | <div class="have_time">已经发生{{ item.haveTime }}</div> |
| | | </div> |
| | | <div class="line time"> |
| | | <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> |
| | | <span>{{ item.createDate }}</span> |
| | | <div class="wrap"> |
| | | <div class="line addr"> |
| | | <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> |
| | | <span>{{ item.addr }}</span> |
| | | </div> |
| | | <div class="line time"> |
| | | <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> |
| | | <span>{{ item.createDate }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div v-if="item.title0 && item.createDate0" class="item_wrap"> |
| | | <img :src="item.img0" class="avatar" alt=""> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="name">{{ item.title0 }}</div> |
| | | <div class="have_time">已经发生{{ item.haveTime0 }}</div> |
| | | </div> |
| | | <div class="wrap"> |
| | | <div class="line addr"> |
| | | <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> |
| | | <span>{{ item.addr0 }}</span> |
| | | </div> |
| | | <div class="line time"> |
| | | <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> |
| | | <span>{{ item.createDate0 }}</span> |
| | | </div> |
| | | </div> |
| | | </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> |
| | | <div class="garden_warning"> |
| | | <div class="com_header"> |
| | |
| | | <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 class="dept">拜访部门</div> |
| | | <div class="dept">超时时长</div> |
| | | </div> |
| | | <div class="three-swiper list"> |
| | | <div v-if="dataList3.length > 0" class="three-swiper list"> |
| | | <div class="swiper-wrapper"> |
| | | <div class="item swiper-slide three-swiper-slide" v-for="item in dataList3"> |
| | | <div class="line"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-if="dataList3.length == 0" class="empty_wrap"> |
| | | <img src="@/assets/images/default_empty.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | }, 1000) |
| | | |
| | | |
| | | const oWebControl = ref(null) |
| | | const initCount = ref() |
| | | const pubKey = ref('') |
| | | const initPlugin = () => { |
| | | oWebControl.value = new WebControl({ |
| | | szPluginContainer: "playWnd", // 指定容器id |
| | | iServicePortStart: 15900, // 指定起止端口号,建议使用该值 |
| | | iServicePortEnd: 15900, |
| | | szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsid |
| | | cbConnectSuccess: function () { |
| | | // 创建WebControl实例成功 |
| | | oWebControl.value.JS_StartService("window", { // WebControl实例创建成功后需要启动服务 |
| | | dllPath: "./VideoPluginConnect.dll" // 值"./VideoPluginConnect.dll"写死 |
| | | }).then(function () { |
| | | oWebControl.value.JS_SetWindowControlCallback({ // 设置消息回调 |
| | | cbIntegrationCallBack: cbIntegrationCallBack |
| | | })// 启动插件服务成功 |
| | | // oWebControl.value.JS_CreateWnd("playWnd", that.boxWidth, that.boxHeight).then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定,boxWidth, boxHeight容器 |
| | | oWebControl.value.JS_CreateWnd("playWnd").then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定,boxWidth, boxHeight容器 |
| | | init() // 创建播放实例成功后初始化 |
| | | }) |
| | | }, function () { // 启动插件服务失败 |
| | | }) |
| | | }, |
| | | cbConnectError: function () { // 创建WebControl实例失败 |
| | | oWebControl.value = null |
| | | $("#playWnd").html("插件未启动,正在尝试启动,请稍候...") |
| | | WebControl.JS_WakeUp("VideoWebPlugin://") // 程序未启动时执行error函数,采用wakeup来启动程序 |
| | | initCount.value++ |
| | | if (initCount.value < 3) { |
| | | setTimeout(function () { |
| | | initPlugin() |
| | | }, 3000) |
| | | } else { |
| | | $("#playWnd").html("插件启动失败,请检查插件是否安装!或重新下载 <a href='./videoUrl/VideoWebPlugin.exe' target='_blank'>下载a<a>") |
| | | } |
| | | }, |
| | | cbConnectClose: function (bNormalClose) { |
| | | // 异常断开:bNormalClose = false |
| | | // JS_Disconnect正常断开:bNormalClose = true |
| | | oWebControl.value = null |
| | | $("#playWnd").html("插件未启动,正在尝试启动,请稍候...") |
| | | WebControl.JS_WakeUp("VideoWebPlugin://") |
| | | initCount.value++ |
| | | if (initCount.value < 3) { |
| | | setTimeout(function () { |
| | | initPlugin() |
| | | }, 3000) |
| | | } else { |
| | | $("#playWnd").html("插件启动失败,请检查插件是否安装!或重新下载 <a href='https://img0.baidu.com/it/u=3867022436,608124672&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1422' target='_blank'>下载b<a>") |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | function fileDown (){ |
| | | window.open('./videoUrl/VideoWebPlugin.exe') |
| | | } |
| | | // 消息回调 |
| | | const cbIntegrationCallBack = (oData) => { |
| | | let response = oData.responseMsg |
| | | // response.type=1 选中窗口消息 type=2 播放消息 |
| | | } |
| | | // 监控 |
| | | |
| | | |
| | | |
| | | |
| | | // 初始化 |
| | | const init = () => { |
| | | getPubKey(function () { |
| | | ////////////////////////////////// 请自行修改以下变量值 //////////////////////////////////// |
| | | let appkey = "28631222" //综合安防管理平台提供的appkey,必填 |
| | | let secret = setEncrypt("vRfUmiilCd4EpLmtZKoT") //综合安防管理平台提供的secret,必填 |
| | | let ip = "112.48.8.98" //综合安防管理平台IP地址,必填 |
| | | let playMode = 0 //初始播放模式:0-预览(实时流),1-回放(视频) |
| | | let port = 10443 //综合安防管理平台端口,若启用HTTPS协议,默认443 |
| | | let snapDir = "D:\\SnapDir" //抓图存储路径 |
| | | let videoDir = "D:\\VideoDir" //紧急录像或录像剪辑存储路径 |
| | | let layout = "4x1" //playMode指定模式的布局 |
| | | let enableHTTPS = 1 //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1 |
| | | let encryptedFields = 'secret' //加密字段,默认加密领域为secret |
| | | let showToolbar = 1 //是否显示工具栏,0-不显示,非0-显示 |
| | | let showSmart = 1 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示 |
| | | let buttonIDs = "0,16,256,257,258,259,260,513,514,515,516,517,768" //自定义工具条按钮 |
| | | oWebControl.value.JS_RequestInterface({ |
| | | funcName: "init", |
| | | argument: JSON.stringify({ |
| | | appkey: appkey, //API网关提供的appkey |
| | | secret: secret, //API网关提供的secret |
| | | ip: ip, //API网关IP地址 |
| | | playMode: playMode, //播放模式(决定显示预览还是回放界面) |
| | | port: port, //端口 |
| | | snapDir: snapDir, //抓图存储路径 |
| | | videoDir: videoDir, //紧急录像或录像剪辑存储路径 |
| | | layout: layout, //布局 |
| | | enableHTTPS: enableHTTPS, //是否启用HTTPS协议 |
| | | encryptedFields: encryptedFields, //加密字段 |
| | | showToolbar: showToolbar, //是否显示工具栏 |
| | | showSmart: showSmart, //是否显示智能信息 |
| | | buttonIDs: buttonIDs //自定义工具条按钮 |
| | | }) |
| | | }).then(function (oData) { |
| | | // oWebControl.value.JS_Resize(that.boxWidth, that.boxHeight) // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题 |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | // 获取公钥 |
| | | function getPubKey(callback) { |
| | | oWebControl.value.JS_RequestInterface({ |
| | | funcName: 'getRSAPubKey', |
| | | argument: JSON.stringify({ |
| | | keyLength: 1024, |
| | | }), |
| | | }).then((oData) => { |
| | | if (oData.responseMsg.data) { |
| | | pubKey.value = oData.responseMsg.data |
| | | callback() |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // RSA加密 |
| | | function setEncrypt(value) { |
| | | let that = this |
| | | let encrypt = new JSEncrypt() |
| | | encrypt.setPublicKey(pubKey.value) |
| | | return encrypt.encrypt(value) |
| | | } |
| | | |
| | | |
| | | const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a'] |
| | |
| | | }]), |
| | | 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: { |
| | |
| | | gap: 4, |
| | | label: { |
| | | show: false, |
| | | formatter: '', |
| | | lineHeight: 0, |
| | | position: 'inside' |
| | | }, |
| | | tooltip: { |
| | | trigger: 'none', // 当鼠标悬浮在某个数据项上时触发 |
| | |
| | | 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() |
| | | }) |
| | | } |
| | | |
| | |
| | | const data4 = ref({}) |
| | | const getData3 = () => { |
| | | visitSecurityData().then(res => { |
| | | if( !res.code == 200) return |
| | | if (!res.code == 200) return |
| | | data4.value = res.data || {} |
| | | let obj = data4.value |
| | | data4.value.total = obj.levelNum + obj.retentionNum + obj.registerVisitNum + obj.waitVisitNum |
| | | const result = res.data.visitRetentionDataList || [] |
| | | data4.value.total = obj.levelNum + obj.retentionNum + obj.registerVisitNum + obj.waitVisitNum |
| | | const result = res.data?.visitRetentionDataList || [] |
| | | dataList3.value = result.map(i => { |
| | | if (i.timeOutMinute) { |
| | | i.timeOutMinute = Math.abs(i.timeOutMinute) |
| | |
| | | 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) |
| | |
| | | item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.createDate).getTime()).format('HH小时mm分钟') |
| | | return item |
| | | }) |
| | | // loopFn1() |
| | | let temp = [] |
| | | warningList.value.forEach((item, i) => { |
| | | // console.log(i); |
| | | if (i == 0 || i % 2 == 0) { |
| | | temp.push(item) |
| | | } else { |
| | | temp[temp.length - 1].addr0 = item.addr |
| | | temp[temp.length - 1].createDate0 = item.createDate |
| | | temp[temp.length - 1].haveTime0 = item.haveTime |
| | | temp[temp.length - 1].img0 = item.img |
| | | temp[temp.length - 1].title0 = item.title |
| | | } |
| | | }) |
| | | warningList.value = temp |
| | | // console.log('temp', warningList.value); |
| | | }) |
| | | } |
| | | const tasClick = (val) => { |
| | |
| | | } |
| | | } |
| | | const menuItemClick = (val) => { |
| | | initPlugin() |
| | | activeMenu.value = val |
| | | afgetCarmeraPreviemUrl({ indexCode: val.indexCode }).then(res => { |
| | | activeVideo.value = res.data |
| | | oWebControl.value.JS_RequestInterface({ |
| | | funcName: "startPreview", |
| | | argument: JSON.stringify({ |
| | | cameraIndexCode: val.indexCode, //监控点编号 |
| | | streamMode: 0, //主子码流标识:0-主码流,1-子码流 |
| | | transMode: 1, //传输协议:0-UDP,1-TCP |
| | | gpuMode: 0, //是否启用GPU硬解,0-不启用,1-启用 |
| | | wndId: -1 //播放窗口序号(在2x2以上布局下可指定播放窗口) |
| | | }) |
| | | }).then((oData) => { |
| | | if (oData.responseMsg.code === 1) { |
| | | console.log('success') |
| | | } |
| | | }) |
| | | // afgetCarmeraPreviemUrl({ indexCode: val.indexCode }).then(res => { |
| | | // activeVideo.value = res.data |
| | | // }) |
| | | } |
| | | |
| | | const autoplayFlag = (list = [], leng = 4, time = 2000) => { |
| | |
| | | const loopFn1 = () => { |
| | | var newSwiper1 = new Swiper('.one-swiper', { |
| | | initialSlide: 0, |
| | | loop: true, // 循环模式选项 |
| | | // loop: true, // 循环模式选项 |
| | | direction: 'vertical', //竖直方向 |
| | | slidesPerView: 1, |
| | | slidesPerGroup: 2, |
| | | slidesPerColumn: 2, |
| | | // autoplay: { delay: 500, disableOnInteraction: false }, |
| | | autoplay: warningList.value.length > 2 ? { delay: 500, disableOnInteraction: false } : false, |
| | | slidesPerView: 2, |
| | | autoplay: warningList.value.length > 1 ? { delay: 4000, disableOnInteraction: false } : false, |
| | | observer: true, //修改swiper自己或子元素时,自动初始化swiper |
| | | }) |
| | | } |
| | |
| | | initialSlide: 0, |
| | | direction: 'vertical', //竖直方向 |
| | | slidesPerView: 3, |
| | | autoplay: autoplayFlag(dataList2.value, 3, 2000), |
| | | autoplay: autoplayFlag(dataList2.value, 3, 4000), |
| | | observer: true, //修改swiper自己或子元素时,自动初始化swiper |
| | | }) |
| | | } |
| | |
| | | |
| | | |
| | | |
| | | |
| | | onMounted(() => { |
| | | 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; |
| | |
| | | |
| | | .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 { |
| | | height: 140px; |
| | | overflow: hidden; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | } |
| | | |
| | | .list { |
| | | height: 124px; |
| | | overflow: auto; |
| | | height: 204px; |
| | | overflow: hidden; |
| | | margin-top: 15px; |
| | | scrollbar-width: none; |
| | | display: flex; |
| | |
| | | margin-left: 20px; |
| | | |
| | | .item { |
| | | width: 366px; |
| | | /* width: 50%; */ |
| | | float: left; |
| | | width: 736px; |
| | | height: 102px !important; |
| | | font-size: 13px; |
| | | color: #D2E0FF; |
| | | margin-right: 10px; |
| | | display: flex; |
| | | |
| | | &:nth-of-type(2n) { |
| | | margin-right: 0; |
| | | } |
| | | |
| | | /* border: 1px solid; */ |
| | | .item_wrap { |
| | | width: 368px; |
| | | height: 90px; |
| | | padding: 10px; |
| | | background: linear-gradient(270deg, rgba(1, 217, 254, 0) 0%, rgba(1, 217, 254, 0.19) 100%); |
| | | border: 1px solid #006E81; |
| | | display: flex; |
| | | margin-right: 10px; |
| | | |
| | | &:nth-of-type(2n) { |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | position: relative; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | |
| | | .content { |
| | | display: flex; |
| | |
| | | .table { |
| | | .list { |
| | | height: 102px !important; |
| | | overflow: auto; |
| | | overflow: hidden; |
| | | |
| | | .item { |
| | | height: 34px !important; |
| | |
| | | |
| | | .visitor_warning { |
| | | width: 360px; |
| | | background: rgba(0, 86, 255, 0.05); |
| | | backdrop-filter: blur(5px); |
| | | |
| | | .table { |
| | | .list { |
| | | height: 102px !important; |
| | | overflow: auto; |
| | | overflow: hidden; |
| | | |
| | | .item { |
| | | height: 34px !important; |
| | |
| | | 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; |