123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- <template>
- <div class="app-container">
- <div id="data-view" >
- <div class="main-header">
- <div class="mh-middle">数字健康社区定位系统</div>
- <div class="mh-right">
- <img src="./img/quanping.png" alt="" @click="toggleFullscreen" v-if="!isFullscreen">
- <img src="./img/tuichuquanping.png" alt="" @click="toggleFullscreen" v-if="isFullscreen">
- </div>
- </div>
- <div class="main">
- <div class="left">
- <div class="left-top">
- <div class="top-left"><Left-Chart-1 /></div>
- <div class="top-right">
- <equ-map
- v-loading="mapLoading"
- @callback="initMap"
- height="100%"
- />
- </div>
- </div>
- <div class="left-under">
- <div class="under-title"><b>告警处理完成</b></div>
- <dv-border-box-8 class="under-box" v-if="flag">
- <Left-Chart-99
- title="SOS报警处理"
- :value="percentData.alarmSOS"
- ></Left-Chart-99>
- <Left-Chart-99
- title="电子围栏报警"
- :value="percentData.alarmRail"
- ></Left-Chart-99>
- <Left-Chart-99
- title="跌倒报警"
- :value="percentData.alarmFall"
- ></Left-Chart-99>
- <Left-Chart-99
- title="设备在线率"
- :value="percentData.alarmStauts"
- ></Left-Chart-99>
- <Left-Chart-99
- title="全部报警"
- :value="percentData.alarmAll"
- ></Left-Chart-99>
- </dv-border-box-8>
- </div>
- </div>
- <div class="right">
- <Left-Chart-11 />
- </div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import LeftChart1 from "./LeftChart1";
- import LeftChart11 from "./LeftChart11";
- import LeftChart99 from "./LeftChart99";
- import LeftChart2 from "./LeftChart2";
- import LeftChart3 from "./LeftChart3";
- import CenterCmp from "./CenterCmp";
- import RightChart1 from "./RightChart1";
- import RightChart2 from "./RightChart2";
- import BottomCharts from "./BottomCharts";
- import equMap from "./Map.vue";
- import { percent, alarmList } from "@/api/system/datav";
- export default {
- name: "DataView",
- components: {
- LeftChart1,
- LeftChart11,
- LeftChart99,
- LeftChart2,
- LeftChart3,
- CenterCmp,
- RightChart1,
- RightChart2,
- BottomCharts,
- equMap,
- },
- data() {
- return {
- mapLoading: false,
- percentData: {},
- flag: false,
- isFullscreen:false,// 初始状态为非全屏
- };
- },
- mounted() {
- this.initData();
- },
- methods: {
- toggleFullscreen() {
- if (this.isFullscreen) {
- // 退出全屏模式
- if (document.exitFullscreen) {
- document.exitFullscreen();
- } else if (document.mozCancelFullScreen) {
- document.mozCancelFullScreen();
- } else if (document.webkitExitFullscreen) {
- document.webkitExitFullscreen();
- }
- this.isFullscreen=false;
- } else {
- // 进入全屏模式
- const content = document.querySelector('#data-view');
- // console.log(content,888);
- // return
- if (content.requestFullscreen) {
- content.requestFullscreen();
- } else if (content.mozRequestFullScreen) {
- content.mozRequestFullScreen();
- } else if (content.webkitRequestFullscreen) {
- content.webkitRequestFullscreen();
- }
- this.isFullscreen=true;
- }
- },
- initData() {
- percent().then((res) => {
- this.percentData = res.data;
- this.flag = true;
- console.log("我刚执行");
- });
- },
- initMap(AMap) {
- console.log('进来了');
- this.AMap = AMap;
- this.map = new AMap.Map("map", {
- // 设置地图容器id
- // viewMode: "3D", // 是否为3D地图模式
- zoom: 5, // 初始化地图级别
- center: [105.602725, 37.076636], // 初始化地图中心点位置
- });
- this.clickMarker = new this.AMap.Marker();
- alarmList().then((res) => {
- const data = res.data;
- // console.log(data, 777);
- this.addMapMarkers(this.AMap, data);
- });
- // this.addMapMarkers(this.AMap, {
- // equList: [
- // { lng: 105.602725, lat: 37.076636 },
- // { lng: 113.8098755478859, lat: 34.75219686835205 },
- // ],
- // });
- // this.getEquMap();
- // 暂时放这里
- // this.map.on("click", (e) => {
- // console.log(e, "e");
- // this.regeoCode(e.lnglat);
- // });
- },
- getCalss(type) {
- console.log(type, "111");
- let icon = "";
- switch (type) {
- case 16:
- icon = require(`./img/sos.png`);
- break;
- case 25:
- // 围栏
- icon = require(`./img/weilan.png`);
- break;
- }
- return icon;
- },
- // 地图覆盖物
- addMapMarkers(AMap, data) {
- console.log(data, "data");
- // // 项目中心点
- // const centerMarker = new AMap.Marker({
- // position: new AMap.LngLat(data.projectLng, data.projectLat),
- // offset: new AMap.Pixel(-20, -20),
- // icon: require(`@/assets/map-icon/center.png`),
- // });
- // 设备分布点
- this.markers = [];
- let icon = "";
- data.forEach((item) => {
- // this.getCalss(item.alarm_type);
- switch (item.alarm_type) {
- case 16:
- icon = require(`./img/sos.png`);
- break;
- case 17:
- // 跌倒
- icon = require(`./img/didian.png`);
- break;
- case 22:
- // 心率
- icon = require(`./img/xinlv.png`);
- break;
- case 24:
- icon = require(`./img/shebei.png`);
- break;
- case 25:
- // 围栏
- icon = require(`./img/weilan.png`);
- break;
- }
- // console.log("执行了");
- // console.log("icon", icon);
- const marker = new AMap.Marker({
- position: new AMap.LngLat(item.gps_long, item.gps_lat),
- offset: new AMap.Pixel(-13, -30),
- // icon: require(`./img/${item.alarm_type}-${
- // item.online === 0 ? "GRAY" : item.flag ? "DEFAULT" : "DANGER"
- // }.png`),
- icon: icon,
- extData: {
- id: item.id,
- equNo: item.equNo,
- netCode: data.netCode,
- classifyCode: item.classifyCode,
- flag: item.flag,
- online: item.online,
- },
- });
- this.markers.push(marker);
- // this.map.add(marker);
- });
- const overlayGroups = new AMap.OverlayGroup(this.markers);
- // 比例尺
- const scale = new AMap.Scale();
- this.map.add(overlayGroups);
- // this.map.add(centerMarker);
- this.map.addControl(scale);
- // 鼠标点击marker弹出自定义的信息窗体
- overlayGroups.eachOverlay((overlay, index, collections) => {
- const extData = overlay.getExtData();
- overlay.on("click", () => {
- data.forEach((item) => {
- console.log(item, "item");
- const infoWindow = new AMap.InfoWindow({
- content: `<div class="equ-info-box">
- <p class="equ-info-item"><span class="label-type">【${
- item.alarm_msg
- }】</span></p>
- <p class="equ-info-item"><span class="label">姓名</span><span class="value tag">${
- item.name ? item.name : ""
- }</span></p>
- <p class="equ-info-item"><span class="label">手机号</span><span class="value">${
- item.telno?item.telno:''
- }</span></p>
- <p class="equ-info-item"><span class="label">所在位置</span><span class="value">${
- item.address?item.address:''
- }</span></p>
- <p class="equ-info-item"><span class="label">告警时间</span><span class="value">${
- item.createtime?item.createtime:''
- }</span></p>
- </div>`,
- anchor: "top-center",
- });
- infoWindow.open(this.map, overlay.getPosition());
- });
- // const params = {
- // netCode: extData.netCode,
- // equNo: extData.equNo,
- // };
- // getEquInfo(params).then((res) => {
- // const info = res.data;
- // const id = extData.id;
- // const currentMarker = this.markers.find(
- // (item) => item._opts.extData.id === id
- // );
- // currentMarker.setIcon(
- // require(`@/assets/map-icon/${extData.classifyCode}-${
- // info.online === 0 ? "GRAY" : extData.flag ? "DEFAULT" : "DANGER"
- // }.png`)
- // );
- // const onlineEnum = {
- // 0: "离线",
- // 1: "在线",
- // };
- // info.projectName = data.projectName;
- // });
- });
- });
- // // 地图的3km圆
- // const circle = new AMap.Circle({
- // center: new AMap.LngLat(data.projectLng, data.projectLat), // 圆心位置
- // radius: data.radius * 1000, // 半径
- // strokeColor: "#367EF5", // 线颜色
- // strokeOpacity: 0.8, // 线透明度
- // strokeWeight: 1, // 线粗细度
- // fillColor: "#18FFFC", // 填充颜色
- // fillOpacity: 0.1, // 填充透明度
- // });
- // this.map.add(circle);
- // this.map.setFitView();
- /* this.map.on("click", (e) => {
- this.regeoCode(e.lnglat);
- }); */
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- #data-view {
- color: #fff;
- width: 100%;
- // height: 100%;
- min-height: calc(100vh - 84px);
- background: url(../../assets/image/bg.png);
- background-size: 100% 100%;
- background-repeat: no-repeat;
- overflow: auto;
- // #dv-full-screen-container {
- // background-image: url("./img/bg.png");
- // background-size: 100% 100%;
- // box-shadow: 0 0 3px blue;
- // display: flex;
- // flex-direction: column;
- // position: static;
- // }
- .main {
- display: flex;
- width: 100%;
- height: 90%;
- min-height: calc(100vh - 84px);
- padding-right: 10px;
- .left {
- width: 70%;
- .left-top {
- display: flex;
- height: 70%;
- .top-left {
- width: 30%;
- }
- .top-right {
- width: 70%;
- }
- }
- .left-under {
- width: 100%;
- height: 30%;
- .under-title {
- flex: 1;
- height: 10%;
- font-size: 14px;
- margin: 10px 0;
- background: url(../../assets/image/title_bg.png) no-repeat;
- // background: url(./img/title-bg.png) no-repeat;
- b {
- font-size: 14px;
- color: #fff;
- font-style: italic;
- margin-left: 25px;
- line-height: 30px;
- }
- }
- .under-box {
- height: 90%;
- display: flex;
- }
- }
- }
- .right {
- // border: 1px solid pink;
- width: 30%;
- }
- }
- .main-header {
- height: 8%;
- width: 100%;
- display: flex;
- // justify-content: center;
- // align-items: flex-start;
- .mh-left {
- font-size: 20px;
- color: rgb(1, 134, 187);
- a:visited {
- color: rgb(1, 134, 187);
- }
- }
- .mh-middle {
- color: #1ae1e6;
- font-size: 24px;
- flex: 1;
- margin-left:40%;
- }
- .mh-right{
- width: 5%;
- margin-top:2%;
- img{
- width: 20px;
- height: 20px;
- }
- }
- // .mh-left,
- // .mh-right {
- // width: 450px;
- // }
- }
- ::v-deep.top-center {
- // background-color: pink;
- }
- ::v-deep.amap-info-content {
- // background-color: #1ae1e6;
- }
- ::v-deep.amap-info-sharp {
- // background-color: #1ae1e6;
- }
- ::v-deep.equ-info-box {
- padding: 6px 0 6px 8px;
- .equ-info-item {
- margin: 0;
- // margin-bottom: 8px;
- .label-type {
- color: #f00404;
- }
- &.flex {
- display: flex;
- .value {
- &:not(.copy) {
- width: 200px;
- }
- }
- }
- .label {
- display: inline-block;
- width: 60px;
- font-size: 13px;
- color: #999;
- }
- .value {
- color: #505050;
- &.link {
- color: #409eff;
- cursor: pointer;
- &:hover {
- text-decoration: underline;
- user-select: none;
- }
- }
- &.copy {
- padding: 0 15px;
- color: #409eff;
- cursor: pointer;
- }
- }
- }
- }
- // .main-container {
- // height: calc(~"100% - 80px");
- // .border-box-content {
- // padding: 20px;
- // box-sizing: border-box;
- // display: flex;
- // }
- // }
- // .left-chart-container {
- // width: 22%;
- // height: 65%;
- // padding: 10px;
- // box-sizing: border-box;
- // .border-box-content {
- // flex-direction: column;
- // }
- // }
- // .right-main-container {
- // width: 78%;
- // padding-left: 5px;
- // box-sizing: border-box;
- // }
- // .rmc-top-container {
- // height: 65%;
- // display: flex;
- // }
- // .rmctc-left-container {
- // width: 65%;
- // }
- // .rmctc-right-container {
- // width: 35%;
- // }
- // .rmc-bottom-container {
- // height: 35%;
- // }
- // .rmctc-chart-1,
- // .rmctc-chart-2 {
- // height: 50%;
- // }
- }
- </style>
|